package com.example.demo.common;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ExceptionHandler;
import org.springframework.web.bind.annotation.ResponseBody;

/**
 * Created with IntelliJ IDEA.
 * Description:
 * User: DELL
 * Date: 2023-06-04
 * Time: 8:22
 */
@ControllerAdvice // 控制器通知, 随着 Spring 框架的启动而启动
@ResponseBody // 返回 JSON 数据
public class MyExceptionAdvice {

    @Autowired
    private ResultAjax resultAjax;

    /**
     *
     * @ExceptionHandler (异常处理器): 针对那个异常进行处理
     * 该注解默认返回的是静态页面
     */
//    @ExceptionHandler(NullPointerException.class)
//    public ResultAjax doNullPointerException(NullPointerException e) {
//        // 自定义的异常处理, 返回统一的数据格式
//        resultAjax.setCode(200);
//        resultAjax.setDate("空指针异常");
//        resultAjax.setMes(e);
//        return resultAjax;
//    }

    @ExceptionHandler(ArithmeticException.class)
    public ResultAjax doArithmeticException(ArithmeticException e) {
        resultAjax.setCode(200);
        resultAjax.setDate(null);
        resultAjax.setMes(e);
        return resultAjax;
    }

    // 拦截所有异常
    @ExceptionHandler(Exception.class)
    public ResultAjax doException(Exception e) {
        resultAjax.setCode(200);
        resultAjax.setDate("父类异常拦截");
        resultAjax.setMes(e);
        return resultAjax;
    }

    @ExceptionHandler(IndexIllegal.class)
    public ResultAjax doIndexIllegal(IndexIllegal e) {
        resultAjax.setCode(200);
        resultAjax.setDate("自定义异常拦截");
        resultAjax.setMes(e);
        return resultAjax;
    }
}
